/**
 * 股票列表相关API接口
 */

import { apiClient } from './http-client'
import { ApiResponse } from '../types/api'

/**
 * 股票基础信息（后台返回的原始数据结构）
 */
export interface StockRaw {
  stockCode: string           // 股票代码
  stockName: string           // 股票名称
  marketCode: string          // 市场代码
  exchange: string            // 交易所（SH/SZ）
  industry: string | null     // 所属行业
  boardType: string | null    // 板块类型
  stockType: string           // 股票类型
  listingDate: string | null  // 上市日期
  totalShares: number | null  // 总股本
  floatShares: number | null  // 流通股本
  isTradable: boolean         // 是否可交易
  isSuspended: boolean        // 是否停牌
  isDelisted: boolean         // 是否退市
  createdAt: string           // 创建时间
  updatedAt: string           // 更新时间
}

/**
 * 股票信息（前端使用的数据结构）
 */
export interface Stock {
  code: string          // 股票代码
  name: string          // 股票名称
  exchange?: string     // 交易所（SH/SZ）
  industry?: string     // 所属行业
  stockType?: string    // 股票类型
  isTradable?: boolean  // 是否可交易
  isSuspended?: boolean // 是否停牌
  current_price?: number // 当前价格（可能需要从其他接口获取）
  change_percent?: number // 涨跌幅（可能需要从其他接口获取）
  volume?: number       // 成交量（可能需要从其他接口获取）
}

/**
 * 股票列表查询参数
 */
export interface GetStocksParams {
  keyword?: string      // 搜索关键词（股票代码或名称）
  exchange?: string     // 交易所筛选
  page?: number         // 页码
  pageSize?: number     // 每页数量
}

/**
 * 股票列表响应（后台返回的数据结构）
 */
export interface GetStocksResponse {
  total: number
  page: number
  pageSize: number
  totalPages: number
  data: StockRaw[]
}

/**
 * 转换后台股票数据为前端使用的格式
 */
export function convertStockData(raw: StockRaw): Stock {
  return {
    code: raw.stockCode,
    name: raw.stockName,
    exchange: raw.exchange,
    industry: raw.industry || undefined,
    stockType: raw.stockType,
    isTradable: raw.isTradable,
    isSuspended: raw.isSuspended,
  }
}

/**
 * 获取股票列表
 * @param params 查询参数
 * @returns Promise<ApiResponse<GetStocksResponse>>
 */
export const getStocks = async (params?: GetStocksParams): Promise<ApiResponse<GetStocksResponse>> => {
  const queryParams = new URLSearchParams()
  
  if (params?.keyword) queryParams.append('keyword', params.keyword)
  if (params?.exchange) queryParams.append('exchange', params.exchange)
  if (params?.page) queryParams.append('page', params.page.toString())
  if (params?.pageSize) queryParams.append('pageSize', params.pageSize.toString())
  
  const queryString = queryParams.toString()
  const url = `/api/stocks/list${queryString ? `?${queryString}` : ''}`
  
  return await apiClient.get<GetStocksResponse>(url)
}

/**
 * 根据股票代码搜索股票
 * @param keyword 搜索关键词（股票代码或名称）
 * @returns Promise<ApiResponse<Stock[]>>
 */
export const searchStocks = async (keyword: string): Promise<ApiResponse<Stock[]>> => {
  const queryParams = new URLSearchParams({ keyword })
  const response = await apiClient.get<GetStocksResponse>(`/api/stocks/list?${queryParams}`)
  
  // 转换数据格式
  if (response.data && response.data.data) {
    const stocks = response.data.data.map(convertStockData)
    return {
      ...response,
      data: stocks
    }
  }
  
  return {
    ...response,
    data: []
  }
}

/**
 * 获取单个股票详情
 * @param stockCode 股票代码
 * @returns Promise<ApiResponse<Stock>>
 */
export const getStockDetail = async (stockCode: string): Promise<ApiResponse<Stock>> => {
  return await apiClient.get<Stock>(`/api/stocks/${stockCode}`)
}

/**
 * 股票API接口对象
 */
export const stocksApi = {
  getStocks,
  searchStocks,
  getStockDetail,
}

